{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 高维数据的异常检测"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. bagging方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "bagging方法是bootstrap aggregating的缩写。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- #### 概念"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "bagging是一种在原始数据集上通过有放回抽样，重新选出n个新数据集来训练分类器的集成技术。也就是说，数据集始可以重复调用的。  \n",
    "使用训练出来的分类器集合对新样本进行分类，然后用多数投票或者对输出求均值的方法统计所有分类器的分类结果，结果最高的类别即为最终标签。为了提高模型的方差（variance，差异性）,bagging在训练待组合的各个模型的时候是从训练集合中随机抽取数据。比如，随机森林（random forest）就是多个随机决策树平均组合起来以达到较优分类准确率的模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "随机森林算法是上世纪八十年代Breiman等人提出来的，基本思想是构造很多决策树，形成一个森林，然后用这些决策树共同决策输出类型是什么。在整个随机森林算法的过程中，有两个随机过程，第一个是输入数据是随机的，从整体的训练数据中选取一部分作为决策树的输入，而且可放回；第二个就是每个决策树的构建需要的特征是从整体的特征集随机选取的，这两个随机过程使得随机森林很大程度避免了过拟合现象。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- #### 随机森林算法具体的过程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 从训练数据中选取n个数据作为训练数据输入，一般情况下n是远小于整体的训练数据N的，这样就会造成有一部分数据是无法被取到的，这部分数据称为袋外数据，可以使用袋外数据做误差估计。  \n",
    "2. 选取了输入的训练数据的之后，需要构建决策树，具体方法是每一个分裂结点从整体的特征集M中选取m个特征构建，一般情况下m远小于M。  \n",
    "3. 在构造每棵决策树的过程中，按照选取最小的基尼指数进行分裂节点的选取进行决策树的构建。决策树的其他结点都采取相同的分裂规则进行构建，直到该节点的所有训练样例都属于同一类或者达到树的最大深度。  \n",
    "4. 重复第2步和第3步多次，每一次输入数据对应一颗决策树，这样就得到了随机森林，可以用来对预测数据进行决策。  \n",
    "5. 输入的训练数据选择好了，多棵决策树也构建好了，对待预测数据进行预测，比如说输入一个待预测数据，然后多棵决策树同时进行决策，最后采用多数投票的方式进行类别的决策。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. isolation forests方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "isolation forestes算法是由南京大学周志华和澳大利亚莫纳什大学Fei Tony等人共同提出的，用于挖掘异常数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- #### 概念"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "该算法基于异常数据的两个特征：1）异常数据只占少数，2）异常数据特征值和正常数据差别很大。算法得益于随机森林的思想，与随机森林由大量决策树组成一样，isolation forests森林也由大量的二叉树（iTree）组成，这里的二叉树与决策树不同，其构建过程比决策树简单，是一个完全随机的过程。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- #### 具体过程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假设数据集有N条数据，构建一个iTree时，从N条数据中均匀抽样（一般是无放回抽样），抽出$\\psi$个样本作为训练样本。在样本中，随机选一个特征，并在这个特征的所有值范围内（最小值与最大值之间）随机选一个值，对样本进行二叉划分，将样本中小于该值的划分到节点的左边，大于等于该值的划分到节点的右边。由此得到一个分裂条件和左、右两边的数据集，然后分别在左右两边的数据集上重复上面的过程，知道数据集只有一条记录或者达到了树的限定高度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于异常数据较小且特征值和正常数据差别很大。因此，构建iTree时，异常树离根更近，而正常数据例根更远。一个iTree的结果往往不可信，iForest算法通过多次抽取样本，构建多颗二叉树，最后整合所有的结果，并取平均深度作为最终的输出深度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. 总结"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. feature bagging可以降低方差；  \n",
    "2. isolation forests优势在于：  \n",
    "        - 计算成本相比于基于距离或基于密度的算法更小；  \n",
    "        - 具有线性的时间复杂度；  \n",
    "        - 在处理大数据集上有优势。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. 代码复现 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- feature bagging"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyod.models.feature_bagging import FeatureBagging\n",
    "from pyod.utils.data import generate_data\n",
    "from pyod.utils.data import evaluate_print\n",
    "from pyod.utils.example import visualize"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "contamination = 0.1\n",
    "n_train = 200\n",
    "n_test = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\envs\\deep_learning\\lib\\site-packages\\pyod\\utils\\data.py:185: FutureWarning: behaviour=\"old\" is deprecated and will be removed in version 0.8.0. Please use behaviour=\"new\", which makes the returned datasets in the order of X_train, X_test, y_train, y_test.\n",
      "  warn('behaviour=\"old\" is deprecated and will be removed '\n"
     ]
    }
   ],
   "source": [
    "X_train, y_train, X_test, y_test = \\\n",
    "    generate_data(n_train=n_train, \n",
    "                  n_test=n_test, \n",
    "                  n_features=2,\n",
    "                  contamination=contamination,\n",
    "                  random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "FeatureBagging(base_estimator=None, bootstrap_features=False,\n",
       "        check_detector=True, check_estimator=False, combination='average',\n",
       "        contamination=0.1, estimator_params={}, max_features=1.0,\n",
       "        n_estimators=10, n_jobs=1, random_state=None, verbose=0)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# train feature bagging detector\n",
    "clf_name = 'FeatureBagging'\n",
    "clf = FeatureBagging(check_estimator=False)\n",
    "clf.fit(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get the prediction labels and outlier scores of the training data\n",
    "y_train_pred = clf.labels_  # binary labels (0: inliers, 1: outliers)\n",
    "y_train_scores = clf.decision_scores_  # raw outlier scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get the prediction on the test data\n",
    "y_test_pred = clf.predict(X_test)  # outlier labels (0 or 1)\n",
    "y_test_scores = clf.decision_function(X_test)  # outlier scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "On Training Data:\n",
      "FeatureBagging ROC:1.0, precision @ rank n:1.0\n",
      "\n",
      "On Test Data:\n",
      "FeatureBagging ROC:1.0, precision @ rank n:1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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VcWOvA4dOFRd8a60j3XFuzR04NBKNWW/M888UwsXLtTmzZslSdu3b9crr7zSY722tja9+eabmjBhgm655RatXr26wi0FgMoiswHUqoodeW3t16qpJ03VvNXzup2Gamls0ZQxU0pyBWuhRo0apeuvv15nnXWW4vG4Ghsbddttt2l4ykDIu3bt0rnnnqv29nY55zR79uyKtxUAKonMBlCrLN2VnZmkmyd7zZo1Ov744/N6fiwe08yHZmruqrmKNETUFe/S1JOmavbZsxVt6LvzJRTyGQEoj2zzZPdVZHbvkNlA9WXL7IqmT7QhqjkT5uiGD95Q0jEDAQClR2YDqEVV2XVu7ddako7+AIDyI7MB1JI+MT0sAAAA6gPFKwAAAEKD4hUAAAChQfEKAACA0Ki74nXBggXatGnT/vtnnHGGkkPJTJgwQTt27KhSywAAqchsAKmqU7zG49L8+f5rhaUGYdDSpUt10EEH5b2trq70s88AQJ9CZgOoIdUpXhctkqZMkRYvLsnmvvOd72j06NEaPXq0brnlFq1fv16jR4/e//hNN92ka6+9VgsXLtSKFSt08cUXa8yYMdq7d2+37YwYMUJbt26VJN13330aP368xowZo+nTp+8PvdbWVn3jG9/Qqaeeqscee0xXX321Ro0apRNPPFFXXXVVSd4PANQUMhtADal88RqPS7Nm+e9nzSp6T37lypWaP3++nnjiCT3++OO666679MYbb6Rd94ILLtC4ceN0//33a/Xq1Wpubk673po1a/Tggw9q+fLlWr16tSKRiO6//35J0u7duzV69Gg98cQTGjVqlBYvXqznnntOzzzzjL72ta8V9V4QUMUjPQACyGzkg8xGBVV+koJFi6TEnrK2bPF78hMn9npzjz76qM477zwNGDBAknT++efrD3/4Q1FNXLZsmVauXKlTTjlFkrR3714NGTJEkhSJRDQx0d5BgwapqalJ06ZN00c/+lGdc845Rb0uApJHegYNKur3A0CRyGzkg8xGBVX2yGtyD76tzd9vayt6T94512PZjh07FA9ss729veBtTpo0SatXr9bq1av117/+Vddee60kqampSZFIRJIUjUb15JNPauLEiVqyZInOPvvsXr8PBJT4SA+AXiKzkQ8yGxVW2eI1uAeflNyT76XTTz9dS5Ys0Z49e7R7924tXrxYH/nIR7R582Zt27ZN+/bt089+9rP96w8cOFC7du3Kus0zzzxTCxcu1ObNmyVJ27dv1yuvvNJjvba2Nr355puaMGGCbrnlFq1evbrX7wMB6Y70AKg8Mhv5ILNRYZXrNpC6B5+U3JM/7zypofBa+uSTT9bkyZM1fvx4SdK0adN0yimn7O+gP3LkSB133HH71588ebI++9nPqrm5WY899ljabY4aNUrXX3+9zjrrLMXjcTU2Nuq2227T8OHDu623a9cunXvuuWpvb5dzTrNnzy64/UiR6UhPL38/APQSmY18kNmoAkt3CieTcePGueT4eklr1qzR8ccfn/vJixZJF16Y/nRCJCL96EfS+efn3ZYwyfszgrRwoXTZZd3/Yba2SgsW0I8KRTGzlc65cdVuRyWR2b1DZheAzEaZZMvsyh15HT5cuvLK7I+jvpXpSA+AXiCzkQuZjSqpXPE6dqy/AZksWSJt2JD+sQ0b/ON99EgPUHPIbORCZqNKSlK8OudkZqXYVJ9TSLeMuseRHqAiyOzMyOwCkNmokqKL16amJm3btk2DBw8mDFM457Rt2zY1NTVVuynhwJEeoOzI7MzI7AKR2aiSoovXYcOGaePGjdqyZUsp2tPnNDU1adiwYdVuBgBIIrNzIbOB2ld08drY2KiRI0eWoi0AgDIjswGEHZcBAgAAIDQoXgEAABAaFK8AAAAIjYJm2DKzLZJ6ThgNALVvuHPu0Go3opLIbAAhljGzCypeAQAAgGqi2wAAAABCg+IVAAAAoUHxCgAAgNCgeAUAAEBoULwCAAAgNCheAQAAEBoUrwAAAAgNilcAAACEBsUrAAAAQuP/AwLT9v9BqlBhAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 864x720 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# evaluate and print the results\n",
    "print(\"\\nOn Training Data:\")\n",
    "evaluate_print(clf_name, y_train, y_train_scores)\n",
    "print(\"\\nOn Test Data:\")\n",
    "evaluate_print(clf_name, y_test, y_test_scores)\n",
    "\n",
    "# visualize the results\n",
    "visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,\n",
    "          y_test_pred, show_figure=True, save_figure=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- isolation forests"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyod.models.iforest import IForest\n",
    "from pyod.utils.data import generate_data\n",
    "from pyod.utils.data import evaluate_print\n",
    "from pyod.utils.example import visualize"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "contamination = 0.1\n",
    "n_train = 200\n",
    "n_test = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\envs\\deep_learning\\lib\\site-packages\\pyod\\utils\\data.py:185: FutureWarning: behaviour=\"old\" is deprecated and will be removed in version 0.8.0. Please use behaviour=\"new\", which makes the returned datasets in the order of X_train, X_test, y_train, y_test.\n",
      "  warn('behaviour=\"old\" is deprecated and will be removed '\n"
     ]
    }
   ],
   "source": [
    "X_train, y_train, X_test, y_test = \\\n",
    "    generate_data(n_train=n_train,\n",
    "                  n_test=n_test, \n",
    "                  n_features=2,\n",
    "                  contamination=contamination,\n",
    "                  random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "IForest(behaviour='old', bootstrap=False, contamination=0.1, max_features=1.0,\n",
       "    max_samples='auto', n_estimators=100, n_jobs=1, random_state=None,\n",
       "    verbose=0)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf_name = 'IForest'\n",
    "clf = IForest()\n",
    "clf.fit(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train_pred = clf.labels_\n",
    "y_train_scores = clf.decision_scores_\n",
    "y_test_pred = clf.predict(X_test)\n",
    "y_test_scores = clf.decision_function(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "On Training Data:\n",
      "IForest ROC:0.995, precision @ rank n:0.9\n",
      "\n",
      "On Test Data:\n",
      "IForest ROC:1.0, precision @ rank n:1.0\n"
     ]
    }
   ],
   "source": [
    "# evaluate and print the results\n",
    "print(\"\\nOn Training Data:\")\n",
    "evaluate_print(clf_name, y_train, y_train_scores)\n",
    "print(\"\\nOn Test Data:\")\n",
    "evaluate_print(clf_name, y_test, y_test_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x720 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# visualize the results\n",
    "visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,\n",
    "          y_test_pred, show_figure=True, save_figure=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
